  import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Compra {

	
	


	
	Scanner scaner = new Scanner(System.in);
	private static List<String> boletos = new ArrayList<String>();//las sigientes listas son estaticas porque si se altera un valor de la lista este valor deve de ser accesible para cualquier objeto
	private static List<String> cambio = new ArrayList<String>();
	private static int contador_universal;
	
	public void ver_boletos(){//este metodo no tiene valor de retorno e imprime los valores de la variable boletos
		System.out.print(boletos);
	}
	
	
	public void agregar_voleto(String voleto, int estado){// este metodo acepta como parametro  una variable String y un integer estado, con la variable voleto se añade la informacion de un voleto a la lista boletos
		// con la variable estado se altera el estado del voleto
		contador_universal++;
		String disponibilidad ="" ;
		
		if(estado==1 ){// estado 1 disponible, estado 3 en tierra 4 volando
			disponibilidad ="Dispobible";
		}
		else if(estado==0 ){
			disponibilidad = "Cancelado";
		}
		else if(estado ==2){
			disponibilidad = "El avion se encuentra en el aire";
		}
		
		String str=String.valueOf(contador_universal);
		
		voleto = str+")"+voleto+" "+ disponibilidad;
		
		boletos.add(voleto);
		
	}
	
	public String getvoleto(int index){// este metodo acepta el parametro int index con este parametro regresa el valor de la lista boletos en el inice (index-1)
		return boletos.get(index-1);
	}
	
	public List<String> getvoletos(){// este metodo regresa la lista boletos
		return boletos;
	}
	
	public void cambiarlista(){// este metodo al tera cualquier elemento de la lista mostrada  
		int si;
		int secuencia=0;
		int disponible;
		System.out.println(boletos);
		System.out.println("Ingrese el numero de la lista a cambiar");
		int index = scaner.nextInt();
		String vuelo = boletos.get((index-1));
		int pos=vuelo.indexOf("o ");
		int pos1=vuelo.indexOf(" e");
		int indice=0;
		String sub = vuelo.substring((pos+2), (pos1-1));
		for(int i=0; i< Menu3.getlista_vuelo().size(); i++){// con este for se recorre todos los objetos contenidos en la lista lista_vuelo de la clase Menu3
			if( sub == Menu3.getlista_vuelo().get(i).getCodigo()){//con este if se compara el valor de la variable sub y el valor del codigo del objeto de la lista lista_vuelo de la clase Menu3
				indice =i;
			}
		}
		boolean aire= vuelo.endsWith("El avion se encuentra en el aire");
		
		if(aire!= true){// este if compara si el avion esta en el aire si no lo esta se ejecuta los sigientes algoritmos
		String disponibilidad = "Disponible";
		String variable;
		System.out.println("ingrese la clase de asiento a cancelar o alterar 1) primera clase 2) clase ejecutiva 3) clase turista");
		int clase = scaner.nextInt();
		System.out.println("ingrese el motivo del cambio");
		String cambiar = scaner.nextLine();
		System.out.println("decea cambiar "+ vuelo +" por "+ cambiar+" 1) si 2) no");
		si = scaner.nextInt();
		System.out.println("Ingrese el estado del voleto 0) cancelado 1) disponible 2) en el aire");
		disponible = scaner.nextInt();
		if(disponible == 0){// con estos condicionantes se altera el valor de la disponibilidad del boleto
			disponibilidad = "Cancelado";
		}else if ( disponible ==1){
			disponibilidad ="Disponible";
		}else if(disponible == 2){
			disponibilidad = "El avion se encuentra en el aire";
		}
		if(si ==1){
			for(int i=0; i<(index-1); i++){// con este for se copian los valores que esten antes del indice indicado de la lista a alterar
				variable = boletos.get(i);
				cambio.add(variable);
				secuencia++;
			}
			secuencia++;
			String str1 =String.valueOf(secuencia);
			cambio.add(str1+")"+ cambiar+" "+disponibilidad);// se añade el valor de la lista modificado segun el inice 
			for(int j = index; j<boletos.size(); j++){// con este for se copian los valores que esten antes del indice indicado de la lista a alterar
				variable = boletos.get(j);
				cambio.add(variable);
			}
			boletos = cambio;// la lista boletos adquiere el valor de la nueva lista generada anterior mente
			
			if(clase == 1){//en las sigientes tres condiciones se añade un aciento a la variable cantidad de acientos (segun el tipo de asiento escojido) del objeto correspondiente
				int suma1 = (Menu3.getlista_vuelo().get(indice).getcant_aspri()+1);
				Menu3.getlista_vuelo().get(indice).setcant_aspri(suma1);
			}
			else if(clase == 2){
				int suma2 = (Menu3.getlista_vuelo().get(indice).getcant_eje() +1);
				Menu3.getlista_vuelo().get(indice).setcant_eje(suma2);
			}
			else if(clase ==3){
				int suma3 = (Menu3.getlista_vuelo().get(indice).getcant_tur()+1);
				Menu3.getlista_vuelo().get(indice).setcantidad_tur(suma3);
			}
			System.out.println(boletos);
		}
	}else if(aire == false){// en caso el avion este volando se imprime lo siguiente
		System.out.println("El avion se encuentra en el aire por lo que no puede ser alterado.");
	}
	}
	public void volando(int index){	// en esta parte se utiliza la clase string para chequear la ultima frase para determinar si esta en el aire o no
		String estado =boletos.get((index-1));
		boolean tf =estado.endsWith("El avion se encuentra en el aire.");
		if(tf==true){
			System.out.println("El avion esta en el aire.");
				}
		else{
			System.out.println("El avion esta en tierra.");
		}
	}
	public void setlista(String boleto){
		boletos.add(boleto);
	}
	public List<String> getlista(){
		return boletos;
	}
}
